<?php

class CoreModule{
	
	/**
	*	Массив настроек модуля
	*	
	*	@var string 
	*/	
	protected static $ini = array();

	protected static function start( array $options=null ){}
	
	/**
	*	_get_set
	*	
	*	"ПолуМагическая" функция получения или установки 
	*	( в зависимости от переданного параметра $_value )
	*	значения статического массива $staticArr
	*	Используется для создания оберток типа:
	*<code>
	*static $errors = array();
	*
	*static function error( $name, $_value=null ) {
	*	return self::_get_set( self::$errors, $name, $_value );	
	*}
	*</code>
	*	@see Form::error()
	*	@param array $staticArr  - статический массив обмена данных 
	*	@param $name ключ
	*	@param $_value значение для установки или null для получения
	*/	
	protected static function _get_set( array &$staticArr, $name, $_value=null  ){
		if( is_null($_value) ) return isset( $staticArr[ $name ] ) ? $staticArr[ $name ] : null ;
		$staticArr[ $name ]=$_value;
	}
	
	/**
	*	includeTemplate
	*	
	*	Подключение и формирование шаблона 
	*	на основе подготовленного в модуле массива данных $arOut
	*
	*	@param array $arOut  - массив данных для вывода в шаблоне 
	*/	
	static function includeTemplate( $arOut ){
		$tmpl_name = !empty( $arOut['template_name'])? $arOut['template_name'] : $arOut['__CLASS__'].'.template.php';
		$tmpl = _DOCUMENT_ROOT.( !empty( $arOut['template_path']) ? $arOut['template_path'] : TMPL_DEFAULT ).'/'.$tmpl_name;
		if(file_exists($tmpl) && is_file($tmpl)) { 
			include $tmpl;
			//myPrint( $arOut,'includeTemplate $arOut' );
		}
		else{
			$ermess = Lang::get('ERROR_MODULE_INCLUDING').__CLASS__.' template "'.$tmpl.'" doesn\'t exists';
			echo Debug::localError( $ermess );
		}		
	}
	
	
	/**
	*	includeInOb
	*
	*	подключение файла через буфер 
	*	@param string $includeFile  адрес файла	
	*	@param array $arOut  массив данных для вывода в шаблоне 
	*/
	static function includeInOb( $includeFile, $arOut = null ) {
		ob_start();
			include $includeFile;
		return ob_get_clean();
	}
	
	/**
	*	Вывод шаблона
	*	
	*	@param $options - массив опций
	*	@return string 
	*/
	static function Out( array $options=null ) {
		if(empty($options['template_name'])){
			$ermess = Lang::get('ERROR_MODULE_INCLUDING').__CLASS__.' parameter "template_name" is required';
			return Debug::localError( $ermess );
		} 

		self::start();
		ob_start();
			self::includeTemplate( $options );
		$out = ob_get_clean();
		return $out;
	}
	

}
?>